package com.hxt.xt.interceptor;

import java.lang.reflect.Method;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

//import com.auth0.jwt.JWT;
//import com.auth0.jwt.JWTVerifier;
//import com.auth0.jwt.algorithms.Algorithm;
//import com.auth0.jwt.exceptions.JWTDecodeException;
//import com.auth0.jwt.exceptions.JWTVerificationException;
import com.hxt.xt.annotation.PassToken;
import com.hxt.xt.annotation.UserLoginToken;
//import com.pjb.springbootjjwt.entity.User;
//import com.pjb.springbootjjwt.service.UserService;

/**
 * @author jinbin
 * @date 2018-07-08 20:41
 */
public class AuthenticationInterceptor implements HandlerInterceptor {
//    @Autowired
//    UserService userService;

	public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse,
			Object object) throws Exception {
//		String token = httpServletRequest.getHeader("token");// 从 http 请求头中取出 token
//		// 如果不是映射到方法直接通过
//		if (!(object instanceof HandlerMethod)) {
//			return true;
//		}
//		HandlerMethod handlerMethod = (HandlerMethod) object;
//		Method method = handlerMethod.getMethod();
//		System.out.println(method.getName());
//		// 检查是否有passtoken注释，有则跳过认证
//		if (method.isAnnotationPresent(PassToken.class)) {
//			PassToken passToken = method.getAnnotation(PassToken.class);
//			if (passToken.required()) {
//				return true;
//			}
//		}
//		// 检查有没有需要用户权限的注解
//		if (method.isAnnotationPresent(UserLoginToken.class)) {
//			UserLoginToken userLoginToken = method.getAnnotation(UserLoginToken.class);
//			if (userLoginToken.required()) {
//				// 执行认证
//				if (token == null) {
//					throw new RuntimeException("无token，请重新登录");
//				}
//				// 获取 token 中的 user id
//				String userId;
//				try {
//					userId = JWT.decode(token).getAudience().get(0);
//				} catch (JWTDecodeException j) {
//					throw new RuntimeException("401");
//				}
////				User user = null;
//////                User user = userService.findUserById(userId);
////				if (user == null) {
////					throw new RuntimeException("用户不存在，请重新登录");
////				}
//				// 验证 token
////				JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256(user.getPassword())).build();
//				JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256("123456")).build();
//				try {
//					jwtVerifier.verify(token);
//				} catch (JWTVerificationException e) {
//					throw new RuntimeException("401");
//				}
//				return true;
//			}
//		}
		return true;
	}

	public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o,
			ModelAndView modelAndView) throws Exception {

	}

	public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse,
			Object o, Exception e) throws Exception {

	}
}


